package packagepackage

import (
	"fmt"
	"regexp"
	"strconv"
	"sync"
)

func test1() {
	//目标字符串
	searchIn := "John: 2578.34 William: 4567.23 Steve: 5632.18"
	pat := "[0-9]+.[0-9]+" //正则

	f := func(s string) string {
		v, _ := strconv.ParseFloat(s, 32)
		return strconv.FormatFloat(v*2, 'f', 2, 32)
	}

	if ok, _ := regexp.Match(pat, []byte(searchIn)); ok {
		fmt.Println("Match Found!")
	}

	re, _ := regexp.Compile(pat)
	//将匹配到的部分替换为"##.#"
	str := re.ReplaceAllString(searchIn, "##.#")
	fmt.Println(str)
	//参数为函数时
	str2 := re.ReplaceAllStringFunc(searchIn, f)
	fmt.Println(str2)
}

// 定义需要保护起来的成员
type test2Info struct {
	mu  sync.Mutex
	str string
}

func test2Update(i *test2Info) {
	i.mu.Lock()
	i.str = "hello go"
	i.mu.Unlock()
}

func test2() {
	// 现在要对这个str进行修改，那么就需要先加锁，再解锁
	var i test2Info
	test2Update(&i)
}

func Test() {
	test2()
}
